/**
 * 页面/场景基类
 * 小游戏中的所有页面都应继承此类
 */
export default class BasePage {
  constructor(canvas, ctx, pageManager, resourceManager, screenAdapter, api) {
    // 将所有依赖注入为实例属性
    this.canvas = canvas;
    this.ctx = ctx;
    this.pageManager = pageManager;
    this.resourceManager = resourceManager;
    this.screenAdapter = screenAdapter;
    this.api = api;
  }

  /**
   * 页面异步初始化方法
   * 子类必须重写此方法来执行UI创建、数据加载等异步操作
   * @param {...any} args 从 showPage 传递过来的参数
   * @returns {Promise<void>}
   */
  async initialize(...args) {
    // 默认实现为空，子类必须重写
    console.warn(`Page ${this.constructor.name} does not override the initialize method.`);
  }

  /**
   * 页面进入时调用（在 initialize 完成后）
   * 子类可以重写此方法来执行进入动画、播放音乐等
   * @param {...any} args 从 showPage 传递过来的参数
   */
  onEnter(...args) {
    // 默认实现为空
    console.log(`Page ${this.constructor.name} entered.`);
  }

  /**
   * 页面退出时调用
   * 子类可以重写此方法来执行暂停游戏、保存进度等
   */
  onExit() {
    // 默认实现为空
    console.log(`Page ${this.constructor.name} exited.`);
  }

  /**
   * 游戏逻辑更新
   * 子类可以重写此方法
   * @param {number} dt 两帧之间的时间差（毫秒）
   */
  update(dt) {
    // 默认不做任何事
  }

  /**
   * 渲染画面
   * 子类必须重写此方法来绘制页面内容
   */
  render() {
    // 默认清屏
    this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
  }

  // --- 触摸事件处理方法（子类可选择性重写） ---
  handleTouchStart(event) { }
  handleTouchMove(event) { }
  handleTouchEnd(event) { }
  handleTouchCancel(event) { }
}